"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : add_member_page.py
"""

"""
添加成员页面对象
"""

from webtest.autowebui.utils.Logger import logger
from selenium.webdriver.common.by import By
from webtest.autowebui.page_object.base_page import BasePage


class AddmemberPage(BasePage):
    # 设置添加成员的 base_url
    _base_url = 'https://work.weixin.qq.com/wework_admin/frame#contacts'

    # 界面错误提示元素列表
    _error_list = (By.CSS_SELECTOR, ".ww_inputWithTips_tips")

    # 元素定义成类变量，供实例方法调用
    # 定位是元组，使用时需要拆包
    # 设置元素私有化，有对当前 QiYeWeiXin_PO 可见。其他页面对象和用例不能访问
    _username_loc = (By.CSS_SELECTOR, "#username")  # 成员信息的姓名输入框元素
    _account_loc = (By.CSS_SELECTOR, "#memberAdd_acctid")  # 成员信息的账号输入框元素
    _phone_loc = (By.CSS_SELECTOR, "#memberAdd_phone")  # 成员信息的电话输入框元素
    _save_button_loc = (By.CSS_SELECTOR, ".js_btn_save")  # 成员信息的保存按钮元素

    # 一旦涉及页面跳转的方法，可以直接 return 要跳转页面的实例对象。形成链式调用
    def goto_contact(self):
        from webtest.autowebui.page_object.contact_page import ContactPage
        """
        跳转到通讯录页面的方法
        :return:
        """
        return ContactPage(self.driver)

    # 一般的操作
    def add_member(self):
        from webtest.autowebui.page_object.contact_page import ContactPage
        """
        添加成员操作，成功后会跳到通讯录页面
        :return:
        """
        # 填写成员信息：输入姓名
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys('她你')
        # 输入账号
        self.driver.find_element(By.CSS_SELECTOR, "#memberAdd_acctid").send_keys('003')
        # 输入手机号
        self.driver.find_element(By.CSS_SELECTOR, "#memberAdd_phone").send_keys('13599999899')
        # 点击保存
        self.driver.find_element(By.CSS_SELECTOR, ".js_btn_save").click()
        return ContactPage(self.driver)

    # 优化后的操作：
    # 一：继承basepage父类的二次封装selenium
    # 二：元素在 QiYeWeiXin_PO 页面对象的分离

    # 用形参传参，后面的用例直接填写实参
    def end_add_member(self, username, account, phone):
        from webtest.autowebui.page_object.contact_page import ContactPage
        # 输入内容
        logger.info(f'成员页面输入姓名:{username}')
        self.input_(self._username_loc, username)
        logger.info(f'成员页面输入账号:{account}')
        self.input_(self._account_loc, account)
        logger.info(f'成员页面输入电话:{phone}')
        self.input_(self._phone_loc, phone)
        # 点击保存按钮
        logger.info('成员页面点击确定')
        self.click(self._save_button_loc)
        # 截图保存
        self.screenshot()
        logger.info('成员页面确定后截图')
        return ContactPage(self.driver)

    # 同样的行为不同的结果：需要建模不同的方法
    def withNone_username_fail(self, account, phone):
        self.input_(self._account_loc, account)
        logger.info(f'成员页面输入账号:{account}')
        self.input_(self._phone_loc, phone)
        logger.info(f'成员页面输入电话:{phone}')
        # 截图保存
        self.screenshot()
        logger.info('成员页面截图')
        # 定位界面错误提示：
        error_list = self.find_eles(self._error_list)
        # 属性不为空 才返回属性值：错误提示
        error_message = [error_row.text for error_row in error_list if error_row != '']
        logger.info(f'没有姓名添加成员信息获取的弹框报错列表{error_message}')
        return error_message
